home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-09-06 | 28.4 KB | 645 lines | [TEXT/MPS ] |
-
- ; Created: Wednesday, August 14, 1991 9:35 AM
- ;
- ; File: ImageCompression.a
- ;
- ; Assembler Interface to the Macintosh Libraries
- ; Copyright Apple Computer, Inc. 1990-1991
- ; All Rights Reserved
- ;
- ;___________________________________________________________________________
- IF &TYPE('__IncludingImageCompression__') = 'UNDEFINED' THEN
- __IncludingImageCompression__ SET 1
-
-
- gestaltCompressionMgr EQU 'icmp'
- ; These are the bits that are set in the Component flags, and also in the codecInfo struct.
- codecInfoDoes1 EQU $1 ; codec can work with 1-bit pixels
- codecInfoDoes2 EQU $2 ; codec can work with 2-bit pixels
- codecInfoDoes4 EQU $4 ; codec can work with 4-bit pixels
- codecInfoDoes8 EQU $8 ; codec can work with 8-bit pixels
- codecInfoDoes16 EQU $10 ; codec can work with 16-bit pixels
- codecInfoDoes32 EQU $20 ; codec can work with 32-bit pixels
- codecInfoDoesDither EQU $40 ; codec can do ditherMode
- codecInfoDoesStretch EQU $80 ; codec can stretch to arbitrary sizes
- codecInfoDoesShrink EQU $100 ; codec can shrink to arbitrary sizes
- codecInfoDoesMask EQU $200 ; codec can mask to clipping regions
-
- codecInfoDoesTemporal EQU $400 ; codec can handle temporal redundancy
-
- codecInfoDoesDouble EQU $800 ; codec can stretch to double size exactly
- codecInfoDoesQuad EQU $1000 ; codec can stretch to quadruple size exactly
- codecInfoDoesHalf EQU $2000 ; codec can shrink to half size
- codecInfoDoesQuarter EQU $4000 ; codec can shrink to quarter size
-
- codecInfoDoesRotate EQU $8000 ; codec can rotate on decompress
- codecInfoDoesHorizFlip EQU $10000 ; codec can flip horizontally on decompress
- codecInfoDoesVertFlip EQU $20000 ; codec can flip vertically on decompress
- codecInfoDoesSkew EQU $40000 ; codec can skew on decompress
- codecInfoDoesBlend EQU $80000 ; codec can blend on decompress
- codecInfoDoesWarp EQU $100000 ; codec can warp arbitrarily on decompress
- codecInfoDoesRecompress EQU $200000 ; codec can recompress image without accumulating errors
-
- codecInfoDepth1 EQU $1 ; compressed data at 1 bpp depth available
- codecInfoDepth2 EQU $2 ; compressed data at 2 bpp depth available
- codecInfoDepth4 EQU $4 ; compressed data at 4 bpp depth available
- codecInfoDepth8 EQU $8 ; compressed data at 8 bpp depth available
- codecInfoDepth16 EQU $10 ; compressed data at 16 bpp depth available
- codecInfoDepth32 EQU $20 ; compressed data at 32 bpp depth available
- codecInfoDepth24 EQU $40 ; compressed data at 24 bpp depth available
- codecInfoDepth33 EQU $80 ; compressed data at 1 bpp monochrome depth available
- codecInfoDepth34 EQU $100 ; compressed data at 2 bpp grayscale depth available
- codecInfoDepth36 EQU $200 ; compressed data at 4 bpp grayscale depth available
- codecInfoDepth40 EQU $400 ; compressed data at 8 bpp grayscale depth available
- codecInfoStoresClut EQU $800 ; compressed data can have custom cluts
-
- codecFlagUseImageBuffer EQU $1 ; (input) allocate buffer for whole image on decompress sequence
- codecFlagUseScreenBuffer EQU $2 ; (input) allocate buffer for screen on decompress sequence for faster updates
- codecFlagUpdatePrevious EQU $4 ; (input) udate previous buffer on compress sequence
- codecFlagNoScreenUpdate EQU $8 ; (input) dont update screen, but do update image buffer if allocated
- codecFlagWasCompressed EQU $10 ; (input) hint to compressor that image was previously compressed
- codecFlagDontOffscreen EQU $20 ; return error instead of automatically going offscreen
- codecFlagUpdatePreviousComp EQU $40 ; (input) udate previous buffer on compress sequence
- codecFlagForceKeyFrame EQU $80 ; when sent to CompressSequenceFrame, forces that frame to be a key frame
-
- codecFlagUsedImageBuffer EQU $8000 ; (output) indicates that image buffer was used on this decompress sequence
-
- codecErr EQU -8960 ; the codec returned an error
- noCodecErr EQU -8961 ; the specified codec could not be found
- codecUnimpErr EQU -8962 ; this feature is not implemented by the specified codec
- codecSizeErr EQU -8963
- codecScreenBufErr EQU -8964 ; the screen buffer could not be allocated
- codecImageBufErr EQU -8965 ; the image buffer could not be allocated
- codecSpoolErr EQU -8966 ; the compressed data must be in memory (spooling did not work)
- codecAbortErr EQU -8967 ; the operation was aborted by the progress proc
- codecWouldOffscreenErr EQU -8968 ; an offscreen access would have been used, but wasn't allowed because codecFlagDontOffscreen was set
- codecBadDataErr EQU -8969 ; compressed data was found to have inconsistencies
- codecDataVersErr EQU -8970 ; compressed data was of a format version that codec couldn't handle
-
- codecMinimumDataSize EQU 16384 ; The minimum data size for spooling in or out data
-
- compressorComponentType EQU 'imco' ; the type for "Components" which compress images
- decompressorComponentType EQU 'imdc' ; the type for "Components" which decompress images
-
- codecCompletionSource EQU 1
- codecCompletionDest EQU 2
-
- codecProgressOpen EQU 0
- codecProgressUpdatePercent EQU 1
- codecProgressClose EQU 2
-
-
- ProgressProcRecord RECORD 0
- progressProc DS.L 1
- progressRefCon DS.L 1
- size EQU *
- ENDR
-
- CompletionProcRecord RECORD 0
- completionProc DS.L 1
- completionRefCon DS.L 1
- size EQU *
- ENDR
-
- DataProcRecord RECORD 0
- dataProc DS.L 1
- dataRefCon DS.L 1
- size EQU *
- ENDR
-
- FlushProcRecord RECORD 0
- flushProc DS.L 1
- flushRefCon DS.L 1
- size EQU *
- ENDR
-
- ;
- ; The ImageDescription is private data which is produced when an image or sequence
- ; is compressed. It fully describes the format of the compressed data.
- ImageDescription RECORD 0
- idSize DS.L 1 ; total size of ImageDescription including extra data ( CLUTs and other per sequence data
- cType DS.L 1 ; what kind of codec compressed this data
- resvd1 DS.L 1 ; reserved for apple use
- resvd2 DS.W 1 ; reserved for apple use
- dataRefIndex DS.W 1 ; set to zero
- version DS.W 1 ; which version is this data
- revisionLevel DS.W 1 ; what version of that codec did this
- vendor DS.L 1 ; whose codec compressed this data
- temporalQuality DS.L 1 ; what was the temporal quality factor
- spatialQuality DS.L 1 ; what was the spatial quality factor
- width DS.W 1 ; how many pixels wide is this data
- height DS.W 1 ; how many pixels high is this data
- hRes DS.L 1 ; horizontal resolution
- vRes DS.L 1 ; vertical resolution
- dataSize DS.L 1 ; if known, the size of data for this image descriptor
- frameCount DS.W 1 ; number of frames this description applies to
- name DS.B 32 ; name of codec ( in case not installed )
- depth DS.W 1 ; what depth is this data (1-32) or ( 33-40 grayscale )
- clutID DS.W 1 ; clut id or if 0 clut follows or -1 if no clut
- size EQU *
- ENDR
-
- ;
- ; The CodecInfo is the information returned as the codecInfo struct by a codec Component
- ; to the codec manager or to the caller. It is specific to the particular codec
- ; implementation and not to the codec type.
- CodecInfo RECORD 0
- typeName DS.B 32 ; name of the codec type i.e.: 'Apple Image Compression'
- version DS.W 1 ; version of the codec data that this codec knows about
- revisionLevel DS.W 1 ; revision level of this codec i.e: 0x00010001 (1.0.1)
- vendor DS.L 1 ; Maker of this codec i.e: 'appl'
- decompressFlags DS.L 1 ; codecInfo flags for decompression capabilities
- compressFlags DS.L 1 ; codecInfo flags for compression capabilities
- formatFlags DS.L 1 ; codecInfo flags for compression format details
- compressionAccuracy DS.B 1 ; measure (1-255) of accuracy of this codec for compress (0 if unknown)
- decompressionAccuracy DS.B 1 ; measure (1-255) of accuracy of this codec for decompress (0 if unknown)
- compressionSpeed DS.W 1 ; ( millisecs for compressing 320x240 on base mac II) (0 if unknown)
- decompressionSpeed DS.W 1 ; ( millisecs for decompressing 320x240 on mac II)(0 if unknown)
- compressionLevel DS.B 1 ; measure (1-255) of compression level of this codec (0 if unknown)
- resvd DS.B 1 ; pad
- minimumHeight DS.W 1 ; minimum height of image (block size)
- minimumWidth DS.W 1 ; minimum width of image (block size)
- decompressPipelineLatency DS.W 1 ; in milliseconds ( for asynchronous codecs )
- compressPipelineLatency DS.W 1 ; in milliseconds ( for asynchronous codecs )
- privateData DS.L 1
- size EQU *
- ENDR
-
- ; Table used for fast dithering.
- DitherTable RECORD 0
- tag DS.L 1
- seed DS.L 1
- reserved DS.L 1
- data DS.B 1
- size EQU *
- ENDR
-
- ; Name list returned by GetCodecNameList.
- CodecNameSpec RECORD 0
- codec DS.L 1
- cType DS.L 1
- typeName DS.B 32
- name DS.L 1
- size EQU *
- ENDR
-
- CodecNameSpecList RECORD 0
- count DS.W 1
- list DS.L 1
- size EQU *
- ENDR
-
- ; Matrix stuff
- MatrixRecord RECORD 0
- matrix DS.L 3
- size EQU *
- ENDR
-
- FixedPoint RECORD 0
- x DS.L 1
- y DS.L 1
- size EQU *
- ENDR
-
- FixedRect RECORD 0
- left DS.L 1
- top DS.L 1
- right DS.L 1
- bottom DS.L 1
- size EQU *
- ENDR
-
- MACRO
- _CodecManagerVersion
- MOVEQ #$00,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetCodecNameList
- MOVEQ #$01,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetCodecInfo
- MOVEQ #$03,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetMaxCompressionSize
- MOVEQ #$04,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetCompressionTime
- MOVEQ #$05,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CompressImage
- MOVEQ #$06,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _FCompressImage
- MOVEQ #$07,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DecompressImage
- MOVEQ #$08,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _FDecompressImage
- MOVEQ #$09,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CompressSequenceBegin
- MOVEQ #$0A,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CompressSequenceFrame
- MOVEQ #$0B,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DecompressSequenceBegin
- MOVEQ #$0D,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DecompressSequenceFrame
- MOVEQ #$0E,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceMatrix
- MOVEQ #$10,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceMatte
- MOVEQ #$11,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceMask
- MOVEQ #$12,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceTransferMode
- MOVEQ #$13,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceDataProc
- MOVEQ #$14,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceAccuracy
- MOVEQ #$34,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetDSequenceSrcRect
- MOVEQ #$35,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetDSequenceImageBuffer
- MOVEQ #$15,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetDSequenceScreenBuffer
- MOVEQ #$16,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetCSequenceQuality
- MOVEQ #$17,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetCSequencePrev
- MOVEQ #$18,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetCSequenceFlushProc
- MOVEQ #$33,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetCSequenceKeyFrameRate
- MOVEQ #$36,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetCSequencePrevBuffer
- MOVEQ #$19,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CDSequenceBusy
- MOVEQ #$1A,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CDSequenceEnd
- MOVEQ #$1B,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetCompressedImageSize
- MOVEQ #$1C,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetSimilarity
- MOVEQ #$1D,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetImageDescriptionCTable
- MOVEQ #$1E,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetImageDescriptionCTable
- MOVEQ #$1F,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetImageDescriptionExtension
- MOVEQ #$20,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetImageDescriptionExtension
- MOVEQ #$21,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _FindCodec
- MOVEQ #$23,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CompressPicture
- MOVEQ #$24,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _FCompressPicture
- MOVEQ #$25,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _CompressPictureFile
- MOVEQ #$26,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _FCompressPictureFile
- MOVEQ #$27,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetPictureFileHeader
- MOVEQ #$28,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DrawPictureFile
- MOVEQ #$29,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DrawTrimmedPicture
- MOVEQ #$2E,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DrawTrimmedPictureFile
- MOVEQ #$2F,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _MakeThumbnailFromPicture
- MOVEQ #$2A,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _MakeThumbnailFromPictureFile
- MOVEQ #$2B,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _MakeThumbnailFromPixMap
- MOVEQ #$2C,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _TrimImage
- MOVEQ #$2D,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _ConvertImage
- MOVEQ #$30,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _MakeDitherTable
- MOVEQ #$31,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _DisposeDitherTable
- MOVEQ #$32,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetCompressedPixMapInfo
- MOVEQ #$37,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _SetCompressedPixMapInfo
- MOVEQ #$38,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _GetMatrixType
- MOVEQ #$14,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _CopyMatrix
- MOVEQ #$20,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _EqualMatrix
- MOVEQ #$21,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _SetIdentityMatrix
- MOVEQ #$15,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TranslateMatrix
- MOVEQ #$19,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TranslateMatrixTo
- MOVEQ #$1A,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _RotateMatrix
- MOVEQ #$16,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _ScaleMatrix
- MOVEQ #$17,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _SkewMatrix
- MOVEQ #$18,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TransformFixedPoints
- MOVEQ #$22,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TransformPoints
- MOVEQ #$23,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TransformFixedRect
- MOVEQ #$24,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TransformRect
- MOVEQ #$25,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _TransformRgn
- MOVEQ #$39,D0
- DC.W $AAA3 ; TB 02A3
- ENDM
-
- MACRO
- _InverseMatrix
- MOVEQ #$1C,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _ConcatMatrix
- MOVEQ #$1B,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _RectMatrix
- MOVEQ #$1E,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _MapMatrix
- MOVEQ #$1D,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
- MACRO
- _AlignMatrix
- MOVEQ #$1F,D0
- DC.W $ABC2 ; TB 03C2
- ENDM
-
-
- ENDIF ; ...already included